// This file addresses TypeScript errors with Vue 3.5.x
import { ComponentPublicInstance } from 'vue'
import type { Component, ComputedOptions, MethodOptions } from 'vue'

declare module 'vue' {
  export type VNode = Component
  export type App = ComponentPublicInstance
  export type InjectionKey<T> = Symbol<string | number> & { __TYPE__: T }
  export const inject: <T>(key: InjectionKey<T> | string) => T | undefined
  export const provide: <T>(key: InjectionKey<T> | string, value: T) => void
  export const onScopeDispose: (fn: () => void) => void
  export const triggerRef: <T>(ref: ShallowRef<T>) => void
  export const unref: <T>(ref: Ref<T>) => T
  export const toValue: <T>(source: T) => T
  export const reactive: <T extends object>(target: T) => T
  export const effectScope: (detached?: boolean) => any
  export const createTextVNode: (text: string) => VNode
  export const defineComponent: <
    Props = {},
    RawBindings = {},
    D = {},
    C extends ComputedOptions = ComputedOptions,
    M extends MethodOptions = MethodOptions
  >(
    options: any
  ) => any
  export const useAttrs: () => Record<string, any>
  export const createApp: (rootComponent: Component, rootProps?: Record<string, any>) => App
  export const defineAsyncComponent: (source: any) => Component
  export const onActivated: (hook: () => void) => void
  export const onBeforeUnmount: (hook: () => void) => void
  export const ComputedGetter: any
  export const DebuggerOptions: any
  export const shallowRef: <T>(value: T) => { value: T }
  export type ShallowRef<T> = { value: T }
  export type WritableComputedOptions<T> = { get: () => T; set: (value: T) => void }
  export type WritableComputedRef<T> = { value: T }
  export type ComputedRef<T> = { value: T }
  export const toRefs: <T extends object>(object: T) => { [K in keyof T]: Ref<T[K]> }
} 